/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.uch.biblioteca.hibernateSpringDao;

import java.util.List;
import net.uch.biblioteca.mapping.BibUsuario;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.hibernate.criterion.Expression;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Vasquez
 */
public class HSBibUsuarioDAOImpl extends HibernateDaoSupport implements HSBibUsuarioDAO {

    @Override
    public BibUsuario validarUsuario ( String strUserName, String password )
            throws DataAccessException, java.sql.SQLException {

        BibUsuario user = null;

        DetachedCriteria criteria = DetachedCriteria.forClass( BibUsuario.class );
        criteria.add( Expression.eq( "usuLogin", strUserName ) );
        criteria.add( Expression.eq( "usuActivo", "1" ) );
        List<BibUsuario> usuarios = getHibernateTemplate().findByCriteria( criteria );

        if ( usuarios != null ) {
            for ( int i = 0; i < usuarios.size(); i++ ) {
                if ( password.equals( (usuarios.get( i )).getUsuPsw() ) ) {
                    user = usuarios.get( i );
                }
            }
        }
        return user;
    }

    @Override
    public List seleccionarUsuario ( String descripcion ) throws Exception {
        Criteria c = this.getSession().createCriteria( BibUsuario.class ).
                add( Restrictions.eq( "usuActivo", "1" ) );

        if ( descripcion.trim().length() != 0 ) {
            c.add(Restrictions.disjunction()
                    .add( Restrictions.like( "usuNombre", "%" + descripcion + "%" ))
                    .add( Restrictions.like( "usuPaterno", "%" + descripcion + "%" ))
                    .add( Restrictions.like( "usuMaterno", "%" + descripcion + "%" ))
                    );
                    
        }
        return c.list();
    }

    @Override
    public void guardarUsuario ( BibUsuario usuario ) throws Exception {
        this.getHibernateTemplate().save( usuario );
    }

    @Override
    public void actualizarUsuario ( BibUsuario usuario ) throws Exception {
        this.getHibernateTemplate().update( usuario );
    }
    
    @Override
    public void eliminarUsuario( int iUsuid ) throws Exception{
        String sHqlUpdate;

        sHqlUpdate = "update BibUsuario set usuActivo = :activo where usuId = :id";
        this.getSession().createQuery( sHqlUpdate ).setString( "activo", "0" ).
                setInteger( "id", iUsuid ).
                executeUpdate();
    }
    
    @Override
    public BibUsuario buscarUsuario( int iUsuId ) throws Exception{
        return (BibUsuario) this.getSession().createCriteria( BibUsuario.class ).
                add( Restrictions.eq( "usuId", iUsuId ) ).uniqueResult();
    }
}
